<?php
/**
 * 20、设计模式学习-状态模式
 * 就餐控制器
 * 2020年1月2日12:00:00
 */
namespace Application\Controller;

class RepastStateController extends BaseController
{
    // 没有使用状态模式判断就餐情况
    public function noUseState()
    {
        $get_repast_info = function($current){
            if($current == '早'){
                $breakfirst = new \Application\Common\State\NoUseState\Breakfirst('早餐');
                $breakfirst -> getRepastInfo();
            }elseif($current == '中'){
                $lunch = new \Application\Common\State\NoUseState\Lunch('午餐');
                $lunch -> getRepastInfo();
            }else{
                $dinner = new \Application\Common\State\NoUseState\Dinner('晚餐');
                $dinner -> getRepastInfo();
            }
        };
        $current = '早';
        $get_repast_info($current);
        $current = '中';
        $get_repast_info($current);
        $current = '晚';
        $get_repast_info($current);
    }
    // 使用状态模式
    public function useState()
    {
        $repast = new \Application\Common\State\UseState\Repast();
        // 早
        $repast -> current = '早';
        $repast -> getRepastInfo();
        // 中-状态改变
        $repast -> current = '午';
        $repast -> getRepastInfo();
        // 晚-状态改变
        $repast -> current = '晚';
        $repast -> getRepastInfo();
        // 总结：状态模式解耦了按照一个状态变化的判断语句，将其变为处理单元，但增加新的处理单元需要修改最后一个类，使得可以连接这个个处理单元
    }
}
